﻿//2799. 统计完全子数组的数目
//给你一个由 正 整数组成的数组 nums 。
//如果数组中的某个子数组满足下述条件，则称之为 完全子数组 ：
//子数组中 不同 元素的数目等于整个数组不同元素的数目。
//返回数组中 完全子数组 的数目。
//子数组 是数组中的一个连续非空序列。




class Solution {
public:
    int countCompleteSubarrays(vector<int>& nums)
    {
        unordered_map<int, int> table;
        for (auto& e : nums)
        {
            table[e]++;
        }
        int target = table.size();
        unordered_map<int, int> tl;
        int left = 0, right = -1;
        int ans = 0;
        for (right = 0; right < nums.size(); right++)
        {
            tl[nums[right]]++;
            while (tl.size() == target)
            {
                if (--tl[nums[left]] == 0)
                {
                    tl.erase(nums[left]);
                }
                left++;
            }
            ans += left;
        }
        return ans;
    }
};